#include "BasicEnemy.h"
#include "../Player.h"

CBasicEnemy::CBasicEnemy(void)
{

}

CBasicEnemy::~CBasicEnemy(void)
{

}

//Inherited from CEntity///////////////////////////////
void CBasicEnemy::Update (float fElapsedTime)
{
		CEntity::Update(fElapsedTime);
	m_pAM->Update(fElapsedTime,this->m_cAniInfo);
	//Get current animations
	this->SetHeight(m_pAM->GetCHeight(m_cAniInfo));
	this->SetWidth(m_pAM->GetCWidth(m_cAniInfo));
		

	/*
		if(this->GetPosY() + this->GetHeight() < CGame::GetInstance()->GetHeight() && this->OnPlatform() == false)
		this->SetVelY(this->GetVelY()+1);

	if(this->GetPosY() + this->GetHeight() > (int)CGame::GetInstance()->GetHeight())
		this->SetPosY((float)CGame::GetInstance()->GetHeight()-this->GetHeight());

	if(this->GetPosX() <= 0)
		if(this->GetVelX() < 0)
		{
			this->SetVelX(0);
			this->SetPosX(0);
		}

		if(this->GetPosX() + this->GetWidth() >= CGame::GetInstance()->GetWidth())
			if(this->GetVelX() > 0)
			{
				this->SetVelX(0);
				this->SetPosX((float)CGame::GetInstance()->GetWidth()-this->GetWidth());
			}

			if(this->m_pTarget->GetPosX() + m_pTarget->GetWidth() < this->GetPosX())
				this->SetVelX(-300);
			else if(this->m_pTarget->GetPosX() > this->GetPosX() + this->GetWidth())
				this->SetVelX(300);

			if(m_battack==false)
				m_fTimer+=fElapsedTime;
			if(m_fAttackTimer<=m_fTimer&&m_battack==false)
			{
				m_fTimer=0;
				m_battack=true;
			}
			*/
}

void CBasicEnemy::Render (void)
{
	m_pAM->Render(m_cAniInfo,(int)GetPosX(), (int)GetPosY(),1.0,this->GetFacing());
}

RECT CBasicEnemy::GetRect(void) const
{
RECT collision = {(int)this->GetPosX()- (int)(GetWidth()*0.5f), (int)this->GetPosY()-int(GetHeight()*0.5f), (int)this->GetPosX()+ int(GetWidth()*0.5), (int)this->GetPosY()+int(GetHeight()*0.5f)  };
	return collision;
}

bool CBasicEnemy::CheckCollision( IEntity* pOther )
{	

	return true;
}
///////////////////////////////////////////////////////
void CBasicEnemy::HandleEvent(CNEvent* pEvent)
{
		if(pEvent->GetEventID() == "take damage")
	{
		this->m_nHealth -= 35;
		CPlayer* pPlayer = dynamic_cast<CPlayer*>(this->m_pTarget);
		pPlayer->SetCurrentHits(pPlayer->GetCurrentHits()+1);
		this->SetVelX(-(this->GetVelX()+10));
	}
	if(pEvent->GetEventID() == "Return")
	{
		CEventSystem* self = CEventSystem::GetInstance();
		self->SendEvent("TakePlayerDamage");
		m_cAniInfo.SetName("EBaseWalk");	
		m_cAniInfo.SetNext("EBaseAttack");
		m_cAniInfo.SetTime(0);
		m_cAniInfo.SetFrame(0);
		m_battack=false;


	}
}

bool CBasicEnemy::Init(CEntity* pTarget,int x,int y,int speedset)
{
		if(pTarget->GetType() != OBJ_PLAYER)
		return false;
		else
		{
	m_pES = CEventSystem::GetInstance();
	m_pTM	= CSGD_TextureManager::GetInstance();
	m_pXA	= CSGD_XAudio2::GetInstance();
	m_pD3D	= CSGD_Direct3D::GetInstance();
	m_pMS	= CMessageSystem::GetInstance();
	m_pAM	= CAnimationManager::GetInstance();

	CEventSystem::GetInstance()->RegisterClient("take damage", this);
	CEventSystem::GetInstance()->RegisterClient("Return", this);


	//Set planned animations
	this->m_cAniInfo.SetName("EBaseWalk");		 //Specific to class of enemy
	this->m_cAniInfo.SetNext("EBaseAttack");	 //Specific to class of enemy
	this->m_cAniInfo.SetTime(0);			 //Specific to class of enemy
	this->m_cAniInfo.SetFrame(0);			 //Specific to class of enemy

	this->SetHeight(m_pAM->GetCHeight(this->m_cAniInfo));
	this->SetWidth(m_pAM->GetCWidth(this->m_cAniInfo));

	this->SetFacing(true);
	this->SetDensity(1);

	this->SetPosX(float(x));
	this->SetPosY(float(y));//(float)CGame::GetInstance()->GetHeight() - this->GetHeight()-500);
	this->m_eType = OBJ_BASIC_ENEMY;
	this->SetVelX(0);
	this->SetVelY(0);
	this->m_pTarget = pTarget;
	this->m_nHealth = 100;
	this->m_nSpeedoffset =speedset;
	this->OnPlatform(false);

	this->m_fTimer =0;
	this->m_fAttackTimer =0.75f;
	this->m_battack=false;
	}
	return true;
		
}
